package logique.calculateur;

import logique.preferences.CritereTroncon;
import logique.preferences.CritereVille;
import logique.preferences.PreferencesUtilisateur;
import logique.reseau.Troncon;

public class Evaluations {
	private int score;
	private float pheromones;
	private Troncon troncon;
	
	public Evaluations(PreferencesUtilisateur prefs, Troncon t){
		troncon = t;
		// TODO calculer score
		double coef = 1;
		
		for (CritereTroncon ct : prefs.getCriteresTroncons()) {
			coef *= ct.eval(troncon, prefs.getCriteres().indexOf(ct)+1, prefs.getCriteres().size());
		}
		
		for (CritereVille cv : prefs.getCriteresVilles()) {
			coef *= cv.eval(t.getVille1(), prefs.getCriteres().indexOf(cv)+1, prefs.getCriteres().size());
			coef *= cv.eval(t.getVille2(), prefs.getCriteres().indexOf(cv)+1, prefs.getCriteres().size());
		}
		
		// Prise en compte des etapes obligatoires et interdites
		if( prefs.getEtapesInterdites().getEtapes().contains(t.getVille1()) || prefs.getEtapesInterdites().getEtapes().contains(t.getVille2()) ){
			coef *= 100.0;
		}
		
		if( prefs.getEtapesObligatoires().getEtapes().contains(t.getVille1()) || prefs.getEtapesObligatoires().getEtapes().contains(t.getVille2()) ){
			coef *= 0.5;
		}
		
		score = (int)(coef * prefs.getCritereItineraire().eval(troncon));
		
		// Initialisation des phéromones
		pheromones = ((float)Math.random()) * Colonie.TAU;
	}
	
	public int getScore() {
		return score;
	}
	
	public void setScore(int score) {
		this.score = score;
	}
	
	public synchronized float getPheromones() {
		return pheromones;
	}
	
	public synchronized void setPheromones(float pheromones) {
		this.pheromones = pheromones;
	}

	public synchronized void addPheromones(float calculPheromones) {
		pheromones += calculPheromones;
		
	}
	
	public Troncon getTroncon(){
		return troncon;
	}
	
	public void setTroncon(Troncon t){
		troncon = t;
	}
}
